package DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import Entita.Interpretazione;
import Entita.Paziente;
import Entita.Tavola;
import GUI.Main;

public class InterpretazioneDAO
{

	Connection con=null;
	PreparedStatement ptmt=null;
	ResultSet rs=null;

	public InterpretazioneDAO()
	{

	}

	private static Connection getConnection() throws SQLException
	{
		Connection conn;
		conn=ConnectionFactory.getInstance().getConnection();
		return conn;
	}
	//Modifica tutti contenuti secondari da Art->Artigli e Forb->Forbici
	public static void bonifica(){
		int result=0;
		Connection con=null;
		PreparedStatement ptmt=null;
		ResultSet rs=null;
		try
		{
			con=getConnection();
			String querystring="" +
					"UPDATE Interpretazione SET contenutiSecondari='Forbici' WHERE contenutiSecondari='Forb'"; 			
			ptmt=con.prepareStatement(querystring);
			ptmt.execute();
			querystring="" +
					"UPDATE Interpretazione SET contenutiSecondari2='Forbici' WHERE contenutiSecondari2='Forb'"; 			
			ptmt=con.prepareStatement(querystring);
			ptmt.execute();
			querystring="" +
					"UPDATE Interpretazione SET contenutiSecondari3='Forbici' WHERE contenutiSecondari3='Forb'"; 			
			ptmt=con.prepareStatement(querystring);
			ptmt.execute();
			querystring="" +
					"UPDATE Interpretazione SET contenutiSecondari4='Forbici' WHERE contenutiSecondari4='Forb'"; 			
			ptmt=con.prepareStatement(querystring);
			ptmt.execute();
			querystring="" +
					"UPDATE Interpretazione SET contenutiSecondari5='Forbici' WHERE contenutiSecondari5='Forb'"; 			
			ptmt=con.prepareStatement(querystring);
			ptmt.execute();
			querystring="" +
					"UPDATE Interpretazione SET contenutiSecondari='Artigli' WHERE contenutiSecondari='Art'"; 			
			ptmt=con.prepareStatement(querystring);
			ptmt.execute();
			querystring="" +
					"UPDATE Interpretazione SET contenutiSecondari2='Artigli' WHERE contenutiSecondari2='Art'"; 			
			ptmt=con.prepareStatement(querystring);
			ptmt.execute();
			querystring="" +
					"UPDATE Interpretazione SET contenutiSecondari3='Artigli' WHERE contenutiSecondari3='Art'"; 			
			ptmt=con.prepareStatement(querystring);
			ptmt.execute();
			querystring="" +
					"UPDATE Interpretazione SET contenutiSecondari4='Artigli' WHERE contenutiSecondari4='Art'"; 			
			ptmt=con.prepareStatement(querystring);
			ptmt.execute();
			querystring="" +
					"UPDATE Interpretazione SET contenutiSecondari5='Artigli' WHERE contenutiSecondari5='Art'"; 			
			ptmt=con.prepareStatement(querystring);
			ptmt.execute();

		}
		catch(SQLException e)
		{
			Main.showError("Errore:"+e.getMessage());
		}
		finally
		{
			try
			{
				if(rs!=null)
					rs.close();
				if(ptmt!=null)
					ptmt.close();
				if(con!=null)
					con.close();
			}
			catch(SQLException e)
			{
				Main.showError("Errore:"+e.getMessage());
			}
			catch(Exception e)
			{
				Main.showError("Errore:"+e.getMessage());
			}

		}
		
	}

	public void add(Interpretazione interpretazione)
	{
			
		int result=0;
		try
		{
			String querystring="INSERT INTO Interpretazione (ID_Paziente,ID_Tavola,raccolta,inchiesta,qf,posizione,mComprensione,numeroLocalizzazione," +
					"determinantePrimaria,tipoDeterminantePrimaria,qaDeterminantePrimaria,mDeterminanteSecondaria,tipoDeterminanteSecondaria," +
					"CDeterminanteSecondaria,semicDeterminanteSecondaria,c2DeterminanteSecondaria,qaDeterminanteSecondaria,contenutiPrimari,contenutiPrimaritesto," +
					"contenutiSecondari,contenutiSecondari2,contenutiSecondari3,contenutiSecondari4,contenutiSecondari5,manifestazioniParticolari1," +
					"manifestazioniParticolari2,manifestazioniParticolari3,manifestazioniParticolari4,manifestazioniParticolari5,rispostaComplessuale1," +
					"rispostaComplessuale2,rispostaComplessuale3,rispostaComplessuale4,rispostaComplessuale5,frequenze,ordine)" +
					"VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
			con=getConnection();
			ptmt=con.prepareStatement(querystring);
			ptmt.setInt(1, interpretazione.getIdPaziente());
			ptmt.setInt(2, interpretazione.getIdTavola());
			ptmt.setString(3, interpretazione.getRaccolta());
			ptmt.setString(4, interpretazione.getInchiesta());
			ptmt.setString(5, interpretazione.getQf());
			ptmt.setString(6, interpretazione.getPosizione());
			ptmt.setString(7, interpretazione.getmComprensione());
			ptmt.setString(8, interpretazione.getNumeroLocalizzazione());
			ptmt.setString(9, interpretazione.getDeterminantePrimaria());
			ptmt.setString(10, interpretazione.getTipoDeterminantePrimaria());
			ptmt.setString(11, interpretazione.getQaDeterminantePrimaria());
			ptmt.setString(12, interpretazione.getmDeterminanteSecondaria());
			ptmt.setString(13, interpretazione.getTipoDeterminanteSecondaria());
			ptmt.setString(14, interpretazione.getCDeterminanteSecondaria());
			ptmt.setString(15, interpretazione.getSemicDeterminanteSecondaria());
			ptmt.setString(16, interpretazione.getcDeterminanteSecondaria());
			ptmt.setString(17, interpretazione.getQaDeterminanteSecondaria());
			ptmt.setString(18, interpretazione.getContenutiPrimari());
			ptmt.setString(19, interpretazione.getContenutiPrimaritesto());
			ptmt.setString(20, interpretazione.getContenutiSecondari1());
			ptmt.setString(21, interpretazione.getContenutiSecondari2());
			ptmt.setString(22, interpretazione.getContenutiSecondari3());
			ptmt.setString(23, interpretazione.getContenutiSecondari4());
			ptmt.setString(24, interpretazione.getContenutiSecondari5());
			ptmt.setString(25, interpretazione.getManifestazioniParticolari1());
			ptmt.setString(26, interpretazione.getManifestazioniParticolari2());
			ptmt.setString(27, interpretazione.getManifestazioniParticolari3());
			ptmt.setString(28, interpretazione.getManifestazioniParticolari4());
			ptmt.setString(29, interpretazione.getManifestazioniParticolari5());
			ptmt.setString(30, interpretazione.getRispostaComplessuale1());
			ptmt.setString(31, interpretazione.getRispostaComplessuale2());
			ptmt.setString(32, interpretazione.getRispostaComplessuale3());
			ptmt.setString(33, interpretazione.getRispostaComplessuale4());
			ptmt.setString(34, interpretazione.getRispostaComplessuale5());
			ptmt.setString(35, interpretazione.getFrequenze());
			ptmt.setInt(36, interpretazione.getOrdine());
			result=ptmt.executeUpdate();

		}
		catch(SQLException e)
		{
			Main.showError("Errore:"+e.getMessage());
		}
		finally
		{
			try
			{
				if(rs!=null)
					rs.close();
				if(ptmt!=null)
					ptmt.close();
				if(con!=null)
					con.close();
			}
			catch(SQLException e)
			{
				Main.showError("Errore:"+e.getMessage());
			}
			catch(Exception e)
			{
				Main.showError("Errore:"+e.getMessage());
			}

		}

	}

	public void update(Interpretazione interpretazione)
	{

		try
		{
			String querystring="UPDATE Interpretazione SET ID_Paziente=?, ID_Tavola=?, raccolta=?, inchiesta=?, qf=?, posizione=?, mComprensione=?, numeroLocalizzazione=?, " +
					"determinantePrimaria=?, tipoDeterminantePrimaria=?, qaDeterminantePrimaria=?, mDeterminanteSecondaria=?, tipoDeterminanteSecondaria=?, " +
					"CDeterminanteSecondaria=?, semicDeterminanteSecondaria=?, c2DeterminanteSecondaria=?, qaDeterminanteSecondaria=?, contenutiPrimari=?, contenutiPrimaritesto=?, " +
					"contenutiSecondari=?, contenutiSecondari2=?, contenutiSecondari3=?, contenutiSecondari4=?, contenutiSecondari5=?, manifestazioniParticolari1=?, " +
					"manifestazioniParticolari2=?, manifestazioniParticolari3=?, manifestazioniParticolari4=?, manifestazioniParticolari5=?, rispostaComplessuale1=?, " +
					"rispostaComplessuale2=?, rispostaComplessuale3=?, rispostaComplessuale4=?, rispostaComplessuale5=?, frequenze=?, ordine=?" +
					"WHERE ID_Interpretazione=?";
			con=getConnection();
			ptmt=con.prepareStatement(querystring);
			ptmt.setInt(1, interpretazione.getIdPaziente());
			ptmt.setInt(2, interpretazione.getIdTavola());
			ptmt.setString(3, interpretazione.getRaccolta());
			ptmt.setString(4, interpretazione.getInchiesta());
			ptmt.setString(5, interpretazione.getQf());
			ptmt.setString(6, interpretazione.getPosizione());
			ptmt.setString(7, interpretazione.getmComprensione());
			ptmt.setString(8, interpretazione.getNumeroLocalizzazione());
			ptmt.setString(9, interpretazione.getDeterminantePrimaria());
			ptmt.setString(10, interpretazione.getTipoDeterminantePrimaria());
			ptmt.setString(11, interpretazione.getQaDeterminantePrimaria());
			ptmt.setString(12, interpretazione.getmDeterminanteSecondaria());
			ptmt.setString(13, interpretazione.getTipoDeterminanteSecondaria());
			ptmt.setString(14, interpretazione.getCDeterminanteSecondaria());
			ptmt.setString(15, interpretazione.getSemicDeterminanteSecondaria());
			ptmt.setString(16, interpretazione.getcDeterminanteSecondaria());
			ptmt.setString(17, interpretazione.getQaDeterminanteSecondaria());
			ptmt.setString(18, interpretazione.getContenutiPrimari());
			ptmt.setString(19, interpretazione.getContenutiPrimaritesto());
			ptmt.setString(20, interpretazione.getContenutiSecondari1());
			ptmt.setString(21, interpretazione.getContenutiSecondari2());
			ptmt.setString(22, interpretazione.getContenutiSecondari3());
			ptmt.setString(23, interpretazione.getContenutiSecondari4());
			ptmt.setString(24, interpretazione.getContenutiSecondari5());
			ptmt.setString(25, interpretazione.getManifestazioniParticolari1());
			ptmt.setString(26, interpretazione.getManifestazioniParticolari2());
			ptmt.setString(27, interpretazione.getManifestazioniParticolari3());
			ptmt.setString(28, interpretazione.getManifestazioniParticolari4());
			ptmt.setString(29, interpretazione.getManifestazioniParticolari5());
			ptmt.setString(30, interpretazione.getRispostaComplessuale1());
			ptmt.setString(31, interpretazione.getRispostaComplessuale2());
			ptmt.setString(32, interpretazione.getRispostaComplessuale3());
			ptmt.setString(33, interpretazione.getRispostaComplessuale4());
			ptmt.setString(34, interpretazione.getRispostaComplessuale5());
			ptmt.setString(35, interpretazione.getFrequenze());
			ptmt.setInt(36, interpretazione.getOrdine());
			ptmt.setInt(37, interpretazione.getIdInterpretazione());
			ptmt.executeUpdate();

		}
		catch(SQLException e)
		{
			Main.showError("Errore:"+e.getMessage());
		}
		finally
		{
			try
			{
				if(rs!=null)
					rs.close();
				if(ptmt!=null)
					ptmt.close();
				if(con!=null)
					con.close();
			}
			catch(SQLException e)
			{
				Main.showError("Errore:"+e.getMessage());
			}
			catch(Exception e)
			{
				Main.showError("Errore:"+e.getMessage());
			}

		}

	}

	public void delete(Interpretazione interpretazione)
	{

		try
		{
			String querystring="DELETE FROM Interpretazione WHERE ID_Interpretazione=?";
			con=getConnection();
			ptmt=con.prepareStatement(querystring);
			ptmt.setInt(1, interpretazione.getIdInterpretazione());
			ptmt.executeUpdate();

		}
		catch(SQLException e)
		{
			Main.showError("Errore:"+e.getMessage());
		}
		finally
		{
			try
			{
				if(rs!=null)
					rs.close();
				if(ptmt!=null)
					ptmt.close();
				if(con!=null)
					con.close();
			}
			catch(SQLException e)
			{
				Main.showError("Errore:"+e.getMessage());
			}
			catch(Exception e)
			{
				Main.showError("Errore:"+e.getMessage());
			}

		}

	}

//	public List<Paziente> findAll()
//	{
//		List<Paziente> pazienti=new ArrayList<Paziente>();
//		Paziente paziente=null;
//		try
//		{
//			String querystring="SELECT * FROM Pazienti";
//			con=getConnection();
//			ptmt=con.prepareStatement(querystring);
//			rs=ptmt.executeQuery();
//			while(rs.next())
//			{
//				paziente=new Paziente();
//				paziente.setID(rs.getInt(1));
//				paziente.setNome(rs.getString(3));
//				paziente.setCognome(rs.getString(4));
//				paziente.setLuogoNascita(rs.getString(5));
//				paziente.setDataNascita(rs.getDate(6));
//				paziente.setSesso(rs.getBoolean(7));
//				paziente.setTitoloStudio(rs.getString(8));
//				paziente.setProfessione(rs.getString(9));
//				paziente.setIndirizzoVia(rs.getString(10));
//				paziente.setIndirizzoCAP(rs.getString(11));
//				paziente.setIndirizzoCitta(rs.getString(12));
//				paziente.setIndirizzoProvincia(rs.getString(13));
//				paziente.setIndirizzoStato(rs.getString(14));
//				paziente.setLuogoEsame(rs.getString(15));
//				paziente.setDataEsame(rs.getDate(16));
//				paziente.setInterpretazioni(getInterpretazioni(rs.getInt(1)));
//				pazienti.add(paziente);
//			}
//		}
//		catch(SQLException e)
//		{
//			Main.showError("Errore:"+e.getMessage());
//		}
//		finally
//		{
//			try
//			{
//				if(rs!=null)
//					rs.close();
//				if(ptmt!=null)
//					ptmt.close();
//				if(con!=null)
//					con.close();
//			}
//			catch(SQLException e)
//			{
//				Main.showError("Errore:"+e.getMessage());
//			}
//			catch(Exception e)
//			{
//				Main.showError("Errore:"+e.getMessage());
//			}
//
//		}
//		return pazienti;
//	}
	
	public ArrayList<Interpretazione> getInterpretazioni(Paziente paziente)
	{
		ArrayList<Interpretazione> interpretazioni=new ArrayList<Interpretazione>();
		try
		{
			String querystring="SELECT * FROM Interpretazione WHERE ID_Paziente=? ORDER BY ordine";
			con=getConnection();
			ptmt=con.prepareStatement(querystring);
			ptmt.setInt(1, paziente.getID());
			rs=ptmt.executeQuery();
			while(rs.next())
			{
				Interpretazione interpretazione=new Interpretazione();
				interpretazione.setIdInterpretazione(rs.getInt("ID_Interpretazione"));
				interpretazione.setIdTavola(rs.getInt("ID_Tavola"));
				interpretazione.setIdPaziente(rs.getInt("ID_Paziente"));
				interpretazione.setRaccolta(rs.getString("raccolta"));
				interpretazione.setInchiesta(rs.getString("inchiesta"));
				interpretazione.setQf(rs.getString("qf"));
				interpretazione.setPosizione(rs.getString("posizione"));
				interpretazione.setmComprensione(rs.getString("mComprensione"));
				interpretazione.setNumeroLocalizzazione(rs.getString("numeroLocalizzazione"));
				interpretazione.setDeterminantePrimaria(rs.getString("determinantePrimaria"));
				interpretazione.setTipoDeterminantePrimaria(rs.getString("tipoDeterminantePrimaria"));
				interpretazione.setQaDeterminantePrimaria(rs.getString(12));
				interpretazione.setmDeterminanteSecondaria(rs.getString(13));
				interpretazione.setTipoDeterminanteSecondaria(rs.getString(14));
				interpretazione.setCDeterminanteSecondaria(rs.getString(15));
				interpretazione.setSemicDeterminanteSecondaria(rs.getString(16));
				interpretazione.setcDeterminanteSecondaria(rs.getString(17));
				interpretazione.setQaDeterminanteSecondaria(rs.getString(18));
				interpretazione.setContenutiPrimari(rs.getString(19));
				interpretazione.setContenutiPrimaritesto(rs.getString(20));
				interpretazione.setContenutiSecondari1(rs.getString(21));
				interpretazione.setContenutiSecondari2(rs.getString(22));
				interpretazione.setContenutiSecondari3(rs.getString(23));
				interpretazione.setContenutiSecondari4(rs.getString(24));
				interpretazione.setContenutiSecondari5(rs.getString(25));
				interpretazione.setManifestazioniParticolari1(rs.getString(26));
				interpretazione.setManifestazioniParticolari2(rs.getString(27));
				interpretazione.setManifestazioniParticolari3(rs.getString(28));
				interpretazione.setManifestazioniParticolari4(rs.getString(29));
				interpretazione.setManifestazioniParticolari5(rs.getString(30));
				interpretazione.setRispostaComplessuale1(rs.getString(31));
				interpretazione.setRispostaComplessuale2(rs.getString(32));
				interpretazione.setRispostaComplessuale3(rs.getString(33));
				interpretazione.setRispostaComplessuale4(rs.getString(34));
				interpretazione.setRispostaComplessuale5(rs.getString(35));
				interpretazione.setFrequenze(rs.getString(36));
				interpretazione.setOrdine(rs.getInt("ordine"));
				interpretazione.setPaziente(paziente);
				interpretazioni.add(interpretazione);
			}
		}
		catch(SQLException e)
		{
			Main.showError("Errore:"+e.getMessage());
		}
		finally
		{
			try
			{
				if(rs!=null)
					rs.close();
				if(ptmt!=null)
					ptmt.close();
				if(con!=null)
					con.close();
			}
			catch(SQLException e)
			{
				Main.showError("Errore:"+e.getMessage());
			}
			catch(Exception e)
			{
				Main.showError("Errore:"+e.getMessage());
			}

		}
		return interpretazioni;
	}
	
	public void saveInterpretazione(Interpretazione interpretazione, int IDpaziente, int IDtavola)
	{
		try
		{
			String querystring="INSERT INTO Interpretazione (ID_Paziente,ID_Tavola,raccolta,inchiesta,qf,posizione,mComprensione,numeroLocalizzazione," +
					"determinantePrimaria,tipoDeterminantePrimaria,qaDeterminantePrimaria,mDeterminanteSecondaria,tipoDeterminanteSecondaria,CDeterminanteSecondaria," +
					"semicDeterminanteSecondaria,c2DeterminanteSecondaria,qaDeterminanteSecondaria,contenutiPrimari,contenutiPrimaritesto,contenutiSecondari," +
					"contenutiSecondari2,contenutiSecondari3,contenutiSecondari4,contenutiSecondari5,manifestazioniParticolari1,manifestazioniParticolari2," +
					"manifestazioniParticolari3,manifestazioniParticolari4,manifestazioniParticolari5,rispostaComplessuale1,rispostaComplessuale2,rispostaComplessuale3," +
					"rispostaComplessuale4,rispostaComplessuale5,frequenze)" +
					"VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
			con=getConnection();
			ptmt=con.prepareStatement(querystring);
			ptmt.setInt(1, IDpaziente);
			ptmt.setInt(2, IDtavola);
			ptmt.setString(3, interpretazione.getRaccolta());
			ptmt.setString(4, interpretazione.getInchiesta());
			ptmt.setString(5, interpretazione.getQf());
			ptmt.setString(6, interpretazione.getPosizione());
			ptmt.setString(7, interpretazione.getmComprensione());
			ptmt.setString(8, interpretazione.getNumeroLocalizzazione());
			ptmt.setString(9, interpretazione.getDeterminantePrimaria());
			ptmt.setString(10, interpretazione.getTipoDeterminantePrimaria());
			ptmt.setString(11, interpretazione.getQaDeterminantePrimaria());
			ptmt.setString(12, interpretazione.getmDeterminanteSecondaria());
			ptmt.setString(13, interpretazione.getTipoDeterminanteSecondaria());
			ptmt.setString(14, interpretazione.getCDeterminanteSecondaria());
			ptmt.setString(15, interpretazione.getSemicDeterminanteSecondaria());
			ptmt.setString(16, interpretazione.getcDeterminanteSecondaria());
			ptmt.setString(17, interpretazione.getQaDeterminanteSecondaria());
			ptmt.setString(18, interpretazione.getContenutiPrimari());
			ptmt.setString(19, interpretazione.getContenutiPrimaritesto());
			ptmt.setString(20, interpretazione.getContenutiSecondari1());
			ptmt.setString(21, interpretazione.getContenutiSecondari2());
			ptmt.setString(22, interpretazione.getContenutiSecondari3());
			ptmt.setString(23, interpretazione.getContenutiSecondari4());
			ptmt.setString(24, interpretazione.getContenutiSecondari5());
			ptmt.setString(25, interpretazione.getManifestazioniParticolari1());
			ptmt.setString(26, interpretazione.getManifestazioniParticolari2());
			ptmt.setString(27, interpretazione.getManifestazioniParticolari3());
			ptmt.setString(28, interpretazione.getManifestazioniParticolari4());
			ptmt.setString(29, interpretazione.getManifestazioniParticolari5());
			ptmt.setString(30, interpretazione.getRispostaComplessuale1());
			ptmt.setString(31, interpretazione.getRispostaComplessuale2());
			ptmt.setString(32, interpretazione.getRispostaComplessuale3());
			ptmt.setString(33, interpretazione.getRispostaComplessuale4());
			ptmt.setString(34, interpretazione.getRispostaComplessuale5());
			ptmt.setString(35, interpretazione.getFrequenze());
			ptmt.executeUpdate();
		}
		catch(SQLException e)
		{
			Main.showError("Errore:"+e.getMessage());
		}
		finally
		{
			try
			{
				if(rs!=null)
					rs.close();
				if(ptmt!=null)
					ptmt.close();
				if(con!=null)
					con.close();
			}
			catch(SQLException e)
			{
				Main.showError("Errore:"+e.getMessage());
			}
			catch(Exception e)
			{
				Main.showError("Errore:"+e.getMessage());
			}

		}
	}
	
}